﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Text.RegularExpressions;
using Logger;
using System.Xml;
using System.Web.UI;

/// <summary>
/// Summary description for Common
/// </summary>
public class Common: Page
{

    public const string sPathUpTinTuc = "~/Upload/TinTuc";
    public const string sPathUpBoSuuTap = "~/Upload/BoSuuTap";
    public const string sPathUpTuyenSinh = "~/Upload/TuyenSinh";
    public const string sPathUpFile = "~/Upload/TepTin";
    public const string sPathUpAnhDaiDien = "~/Upload/AnhDaiDien";
    public Common()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    /// <summary>
    /// Get các tham số người dùng sau khi login
    /// Input: sKey("Id","TenTruyCap","HoTen")
    /// Output: Giá trị của khóa sKey trong HttpContext.Current.User.Identity
    /// </summary>
    public static string GetKeyUserInfo(string sKey)
    {
        if (HttpContext.Current.User.Identity.Name.Trim().Length == 0) return string.Empty;
        string[] UserInfo = HttpContext.Current.User.Identity.Name.Split(';');
        if (sKey.Equals("Id")) return UserInfo.GetValue(0).ToString();
        if (sKey.Equals("TenTruyCap")) return UserInfo.GetValue(1).ToString();
        if (sKey.Equals("HoTen")) return UserInfo.GetValue(2).ToString();
        return string.Empty;
    }

    /// <summary>
    /// Chuẩn hóa chuỗi dữ liệu khi người dùng input
    /// Input: sContent (chuỗi cần chuẩn hóa)
    /// Output: Chuỗi sau khi replace các ký tự đặc biệt
    /// </summary>
    public static string StandardString(string sContent)
    {
        sContent = sContent.Trim();

        sContent = sContent.Replace("<td>", "");
        sContent = sContent.Replace("</td>", "");
        sContent = sContent.Replace("<tr>", "");
        sContent = sContent.Replace("</tr>", "");
        sContent = sContent.Replace("<table>", "");
        sContent = sContent.Replace("</table>", "");
        sContent = sContent.Replace("<script", "");
        sContent = sContent.Replace("</script>", "");

        sContent = sContent.Replace("OR", "");
        sContent = sContent.Replace("ALTER", "");
        sContent = sContent.Replace("DROP", "");
        return sContent;
    }

    /// <summary>
    /// Đọc khóa thiết lập nằm trong thẻ <appSetting></appSetting> trong Web.config
    /// Input: sKeyApp (tên khóa thiết lập)
    /// Output: Giá trị tương ứng với khóa thiết lập
    /// </summary>
    public static string ReadAppSetting(string sKeyApp)
    {
        return ConfigurationManager.AppSettings[sKeyApp];
    }

    /// <summary>
    /// Ghi log lỗi và quy trình
    /// Input: sPage(Tên của trang cần Log), string sFunction(Tên của hàm cần Log), string sMessage(Nội dung Log)
    /// </summary>
    public static void WriteLog(string sPage, string sFunction, string sMessage)
    {
        try
        {
            string LogPath = HttpContext.Current.Server.MapPath("~/LogInfo");
            if (!System.IO.Directory.Exists(LogPath))
            {
                System.IO.Directory.CreateDirectory(LogPath);
            }
            CLogger TestLogger = new CLogger();
            TestLogger.Initialize(LogPath, "DCTEDU.log", 2);
            TestLogger.LogInformation(sPage, sFunction, sMessage);
            TestLogger.Terminate();
        }
        catch (Exception)
        {
        }
    }

    /// <summary>
    /// Mã hóa chuỗi thành chuỗi MD5
    /// Input: sToEncrypt (Chuỗi cần mã hóa)
    /// Output: Chuỗi sau khi mã hóa
    /// </summary>
    public static string EncryptMD5(string sToEncrypt)
    {
        System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding();
        byte[] bytes = ue.GetBytes(sToEncrypt);

        // encrypt bytes
        System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] hashBytes = md5.ComputeHash(bytes);

        // Convert the encrypted bytes back to a string (base 16)
        string hashString = "";

        for (int i = 0; i < hashBytes.Length; i++)
        {
            hashString += Convert.ToString(hashBytes[i], 16).PadLeft(2, '0');
        }

        return hashString.PadLeft(32, '0');
    }

    /// <summary>
    /// Get Ngày giờ server
    /// Output: Ngày giờ được lấy tại Server
    /// </summary>
    public static DateTime GetServerDateTime()
    {
        return DateTime.Now.ToUniversalTime().AddHours(7);
    }

    public static string GenerateID(int MinSize, int MaxSize)
    {

        string stRefID = String.Empty;

        Random random = new Random();

        int iChosenMaxSize = random.Next(MinSize, MaxSize);


        for (int x = 1; x <= iChosenMaxSize; x++)
        {

            int iCharType = random.Next(1, 3);


            switch (iCharType)
            {

                case 1:
                    {

                        stRefID += char.ConvertFromUtf32(random.Next(48, 57));

                        break;

                    }

                case 2:
                    {

                        stRefID += char.ConvertFromUtf32(random.Next(65, 90));

                        break;

                    }

                case 3:
                    {

                        stRefID += char.ConvertFromUtf32(random.Next(97, 122));

                        break;

                    }

            }



            System.Threading.Thread.Sleep(1);

        }
        return stRefID;

    }

    public static int RandomNumber(int min, int max)
    {
        Random random = new Random();
        return random.Next(min, max);
    }

    public static bool IsNumber(string pText)
    {
        Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
        return regex.IsMatch(pText);
    }

    /// <summary>
    /// Sử dụng để Convert Chữ Số Có Dấu sang Số Không Dấu có gạch ở giữa(Dùng ASCII)
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    public static string ConvertToUnSign(string text)
    {

        for (int i = 33; i < 48; i++)
        {

            text = text.Replace(((char)i).ToString(), "");

        }



        for (int i = 58; i < 65; i++)
        {

            text = text.Replace(((char)i).ToString(), "");

        }



        for (int i = 91; i < 97; i++)
        {

            text = text.Replace(((char)i).ToString(), "");

        }

        for (int i = 123; i < 127; i++)
        {

            text = text.Replace(((char)i).ToString(), "");

        }

        text = text.Replace(" ", "-");
        text = text.Replace("\"", "'");
        Regex regex = new Regex(@"\p{IsCombiningDiacriticalMarks}+");

        string strFormD = text.Normalize(System.Text.NormalizationForm.FormD);

        return regex.Replace(strFormD, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D');

    }

    public static string StandardStringlink(string sContent)
    {
        sContent = sContent.Trim();
        sContent = sContent.Replace("~", ".");
        return sContent;
    }

    /// <summary>
    /// Chuẩn hóa chuỗi dữ liệu khi người dùng input
    /// Input: sContent (chuỗi cần chuẩn hóa)
    /// Output: Chuỗi sau khi replace các ký tự đặc biệt
    /// </summary>
    public static string StandardStringjquery(string sContent)
    {
        sContent = sContent.Trim();
        sContent = sContent.Replace("\"", "'");
        return sContent;
    }
}